<?php
namespace cms\component\page;

use common\component\tool\Tool;
class Page {
	private $total; //数据表中总记录数
	private $lang = 'zh';
	private $listRows; //每页显示行数
	private $limit;
	private $uri;
	private $pageNum; //页数
	private $config = array(
		"zh" => array(
			"header" => "条记录",
			"prev" => "上一页",
			"next" => "下一页",
			"first" => "首 页",
			"last" => "尾 页"
		),
		"en" => array(
			"header" => "records",
			"prev" => "Prev",
			"next" => "Next",
			"first" => "Home",
			"last" => "Last"
		),
		"jp" => array(
			"header" => "条记录",
			"prev" => "上一页",
			"next" => "下一页",
			"first" => "首 页",
			"last" => "尾 页"
		),
		"kr" => array(
			"header" => "条记录",
			"prev" => "上一页",
			"next" => "下一页",
			"first" => "首 页",
			"last" => "尾 页"
		)
	);
	private $listNum = 5;
	/*
	 * $total 		总数量
	 * $lang 		语言
	 * $listRows 	每页显示多少条
	 * $pa 			当前页码
	 */
	public function __construct($total, $lang = 'zh', $listRows = '', $pa = ""){
		$this->total = $total;
		$this->lang = $lang;
		if(!empty($listRows) and is_numeric($listRows)){
			$this->listRows = $listRows;
		}else{
			$this->listRows = Tool::getPageSize();
		}
		$this->uri = $this->getUri($pa);
		$this->page = !empty($_GET["page"]) ? $_GET["page"] : 1;
		$this->pageNum = ceil($this->total/$this->listRows);
		$this->limit = $this->setLimit();
	}

	private function setLimit(){
		return "Limit " . ($this->page-1)*$this->listRows . ", {$this->listRows}";
	}

	private function getUri($pa){
		$url = $_SERVER["REQUEST_URI"] . (strpos($_SERVER["REQUEST_URI"], '?')?'':"?") . $pa;
		$parse = parse_url($url);

	

		if(isset($parse["query"])){
			parse_str($parse['query'],$params);
			unset($params["page"]);
			$url = $parse['path'] . '?' . http_build_query($params);
			
		}

		return $url;
	}

	function __get($args){
		if($args == "limit")
			return $this->limit;
		else
			return null;
	}

	private function start(){
		if($this->total == 0)
			return 0;
		else
			return ($this->page-1)*$this->listRows+1;
	}

	private function end(){
		return min($this->page*$this->listRows, $this->total);
	}

	private function first(){
        $html = "";
		if($this->page == 1)
			$html .= '';
		else
			$html .= "<a href='{$this->uri}&page=1'>{$this->config[$this->lang]["first"]}</a>";

		return $html;
	}

	private function prev(){
        $html = "";
		if($this->page == 1)
			$html .= '';
		else
			$html .= "<a href='{$this->uri}&page=" . ($this->page-1) . "'>{$this->config[$this->lang]["prev"]}</a>";

		return $html;
	}

	private function pageList(){
		$linkPage = "";
		
		$inum = floor($this->listNum/2);
	
		for($i = $inum; $i >= 1; $i--){
			$page = $this->page-$i;

			if($page < 1)
				continue;

			$linkPage .= "<a href='{$this->uri}&page={$page}'>{$page}</a>";

		}
	
		$linkPage .= "{$this->page}";
		

		for($i = 1; $i <= $inum; $i++){
			$page = $this->page+$i;
			if($page <= $this->pageNum)
				$linkPage .= "<a href='{$this->uri}&page={$page}'>{$page}</a>";
			else
				break;
		}

		return $linkPage;
	}

	private function next(){
        $html = "";
		if($this->page==$this->pageNum)
			$html.='';
		else
			$html.="<a href='{$this->uri}&page=".($this->page+1)."'>{$this->config[$this->lang]["next"]}</a>";

		return $html;
	}

	private function last(){
        $html = "";
		if($this->page == $this->pageNum)
			$html .= '';
		else
			$html .= "<a href='{$this->uri}&page=" . ($this->pageNum) . "'>{$this->config[$this->lang]["last"]}</a>";

		return $html;
	}

	private function goPage(){
		return '<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . 
		$this->pageNum . ')?' . 
		$this->pageNum . ':this.value;location=\'' . 
		$this->uri . '&page=\'+page+\'\'}" value="' . 
		$this->page . '" style="width:25px; text-align: center;"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>' . 
		$this->pageNum.')?' . 
		$this->pageNum . ':this.previousSibling.value;location=\'' . 
		$this->uri . '&page=\'+page+\'\'">';
	}

	function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8)){
		if($this->lang == 'zh'){
			$html[0] = "&nbsp;共有<b>{$this->total}</b>{$this->config[$this->lang]["header"]}&nbsp;";
			$html[1] = "&nbsp;每页显示<b>".($this->end()-$this->start()+1)."</b>条，本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;";
			$html[2] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;";
		}
		if($this->lang == 'en'){
			$html[0] = "&nbsp;There are<b>{$this->total}</b>{$this->config[$this->lang]["header"]}&nbsp;";
			$html[1] = "&nbsp;<b>".($this->end()-$this->start()+1)."</b>per page，<b>{$this->start()}-{$this->end()}</b>on this page&nbsp;";
			$html[2] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>page&nbsp;";
		}
		if($this->lang == 'jp'){
			$html[0] = "&nbsp;共有<b>{$this->total}</b>{$this->config[$this->lang]["header"]}&nbsp;";
			$html[1] = "&nbsp;每页显示<b>".($this->end()-$this->start()+1)."</b>条，本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;";
			$html[2] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;";
		}
		if($this->lang == 'kr'){
			$html[0] = "&nbsp;共有<b>{$this->total}</b>{$this->config[$this->lang]["header"]}&nbsp;";
			$html[1] = "&nbsp;每页显示<b>".($this->end()-$this->start()+1)."</b>条，本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;";
			$html[2] = "&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;";
		}

		
		$html[3] = $this->first();
		$html[4] = $this->prev();
		$html[5] = $this->pageList();
		$html[6] = $this->next();
		$html[7] = $this->last();
		$html[8] = $this->goPage();
		$fpage='';
		foreach($display as $index){
			$fpage .= $html[$index];
		}

		return $fpage;

	}


}
?>
